import re
from collections import Counter
import matplotlib.pyplot as plt
from bs4 import BeautifulSoup
import pandas as pd


def demo2():
    源代码_从文件读取 = []  # 创建一个空列表存储读取到的源代码

    # 之前保存文件的数量
    for i in range(1, 271):
        filename = f'../data/source_code_page_{i}.html'
        print(filename)
        # 读取每个 HTML 文件的源代码
        with open(filename, 'r', encoding='utf-8') as file:
            # 将读取到的源代码添加到列表中
            saved_code = file.read()
            源代码_从文件读取.append(saved_code)

    # 遍历读取到的每个源代码
    alljob = []
    for index, code in enumerate(源代码_从文件读取):
        # 使用 BeautifulSoup 解析 HTML
        soup = BeautifulSoup(code, 'html.parser')
        # 查找所有的 <ul> 标签，并提取其中的 <li> 元素
        ul_elements = soup.find('ul', class_="job-keyword-list")
        if ul_elements is not None:
            li_elements = ul_elements.find_all('li')
            for li_element in li_elements:
                alljob.append(''.join(li_element.text))
        else:
            print(f"第 {index + 1} 个源代码不存在 class 为 'job-keyword-list' 的 <ul> 标签。")

    # 这部分可以不用，对应的数据分析
    # 将抓取到的岗位要求合并成一个大字符串，进行处理
    所有工作要求 = ' '.join(alljob)
    # 文本清洗：移除标点符号，并将其转换为小写
    清洗后的工作要求 = re.sub(r'[^\w\s]', '', 所有工作要求.lower())
    # 分词处理
    词语列表 = 清洗后的工作要求.split()
    # 词频统计
    词频统计 = Counter(词语列表)
    # 按照词频降序排序
    排序后的词频 = 词频统计.most_common()

    # alljob = Counter(alljob)
    # 排序后的词频 = alljob.most_common()

    # 做成Excel表
    df = pd.DataFrame(排序后的词频, columns=['职位', '频率'])
    excle_filename = '职位频率统计.xlsx'
    df.to_excel(excle_filename, index=False, engine='openpyxl')
    print(excle_filename)

    # 做成饼图
    排序后的词频前五 = 排序后的词频[:5]
    plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']  # 直接设置字体名称
    words, frequencies = zip(*排序后的词频前五)
    plt.figure(figsize=(8, 8))  # 设置图表大小
    plt.pie(frequencies, labels=words, autopct='%1.1f%%', startangle=140,
            colors=['skyblue', 'gold', 'lightcoral', 'lightgreen', 'pink'])  # 创建饼图，设置颜色、标签、百分比格式和起始角度
    plt.title('职位前五统计饼图')  # 设置图表标题
    plt.axis('equal')  # 确保饼图是圆形的
    plt.savefig("职位前5图表.png")  # 保存下来

    print("走到此步骤")


if __name__ == '__main__':
    demo2()

